<!DOCTYPE html>
<html>
  <head>
    <title>Socket.IO chat</title>
    <meta charset="utf-8" />
    <style>
      * {
        margin: 0;
        padding: 0;
        box-sizing: border-box;
      }

      body {
        font: 13px Helvetica, Arial;
      }

      form {
        background: #000;
        padding: 3px;
        position: fixed;
        bottom: 0;
        width: 100%;
      }

      form input {
        border: 0;
        padding: 10px;
        width: 90%;
        margin-right: 0.5%;
      }

      form button {
        width: 9%;
        background: rgb(130, 224, 255);
        border: none;
        padding: 10px;
      }

      #messages {
        list-style-type: none;
        margin: 0;
        padding: 0;
      }

      #messages li {
        padding: 5px 10px;
      }

      #messages li:nth-child(odd) {
        background: #eee;
      }
    </style>
  </head>

  <body>
    <!-- 消息列表 -->
    <ul id="messages"></ul>

    <!-- 发送消息的表单 -->
    <form action="">
      <input id="m" autocomplete="off" />
      <button>Send</button>
    </form>

    <script src="https://cdn.bootcdn.net/ajax/libs/socket.io/4.1.3/socket.io.js"></script>
    <script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.6.0/jquery.js"></script>
    <script>
      //建立连接
      const socket = io('http://toutiao.itheima.net', {
        query: {
          token: '40835ffc-18f0-45ed-94ff-07c3b8c9bdc4'
        },
        //websocket协议通信,不写则使用轮训
        transports: ['websocket']
      })
      // 注册连接事件
      socket.on('connect', function () {
        console.log('连接成功')
        $('#messages').append('<li>与服务器连接成功</li>')
      })
      // 发送消息
      $('form').on('submit', (e) => {
        e.preventDefault()
        socket.emit('message', {
          msg: $('#m').val().trim(),
          timestamp: Date.now()
        })
        $('#messages').append(`<li>我说${$('#m').val().trim()}</li>`)
      })
      //服务器响应 客户端监听message事件
      socket.on('message', (data) => {
        console.log('收到了', data)
        $('#messages').append(`<li>服务器说${data.msg}</li>`)
      })
    </script>
  </body>
</html>
